// 但是这种奇技淫巧毕竟不具有普遍性，下面是一个通过且用时 0ms 的二分查找
// 注意其中的 mid = l/2 + r/2
// 而不是 (l+r)/2，因为后者在 l+r 较大时会溢出，然后就开始了乱七八糟的循环......
bool isBadVersion(int version);
int firstBadVersion(int n) {
    if(isBadVersion(1)) return 1;
    int l = 1, r = n;
    int mid;
    while(l < r)
    {
        mid = l/2 + r/2;
        if(isBadVersion(mid)) r = mid;
        else l = mid + 1;
    }
    return l;
}